package com.example.room;

import android.app.Application;

import androidx.room.Room;

/**
 * 在Android开发中，Application是一种全局对象，它代表了应用程序的单一实例。你可以看作是整个应用程序的抽象，其中包含了各种全局数据和设置。
 * Application在Android中的主要作用是处理一些全局数据和初始化操作。它提供了一个在整个应用程序中共享信息的机制，例如设置全局变量、初始化配置等。
 * 当应用程序中的任何组件（如Activity、Service、BroadcastReceiver等）需要访问这些信息时，它们可以通过访问Application对象来获取。
 * Application对象在应用程序启动时由系统自动创建，并且在应用程序的生命周期内一直存在。你可以通过继承Application类来创建自己的Application对象，并在其中添加需要的应用程序级别的功能和数据。
 * 以下是一些Application的常用用途：
 *
 * 保存和获取全局数据：你可以在Application对象中保存全局变量或者数据，这样其他组件就可以通过获取Application对象来访问这些数据。
 * 初始化：你可以在Application对象的onCreate方法中进行一些初始化操作，比如加载资源、初始化数据库等。
 * 单例模式：你可以使用Application对象来实现单例模式，确保某些类在整个应用程序中只有一个实例。
 * 生命周期管理：你可以在Application对象的onTerminate方法中执行一些清理操作，例如释放资源、关闭数据库等。
 *
 * 使用Application的时候需要注意，由于它是全局的，因此应该避免在其中存储大量数据或者执行耗时的操作，以免影响应用程序的性能。
 */
public class MyApplication extends Application {
    private static MyApplication instance;

    private BookDataBase bookdb;

    public static MyApplication getInstance() {
        return instance;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        instance = this;
        // 在这里添加其他的初始化操作

        bookdb = Room.databaseBuilder(getApplicationContext(), BookDataBase.class, "books")
                .allowMainThreadQueries() // 允许在主线程操作数据库
                .addMigrations() // 数据库版本更新的时候，不删除数据库
                .build();

    }

    // 在这里添加其他方法和数据


    public BookDataBase getBookdb() {
        return bookdb;
    }

    public void setBookdb(BookDataBase bookdb) {
        this.bookdb = bookdb;
    }
}